package qos.estimator.fuzzy;


public class LabGCCBD5FuzzyRegionsSystemCommand implements ConfigureSystemCommand {

	private FuzzyEstimator fuzzyEstimator;

	
	@Override
	public void configureSystem(FuzzyEstimator fuzzyEstimator) {
		this.fuzzyEstimator = fuzzyEstimator;
		configureBuffers();
		configureMemoryPercentual();
		configureCpuIOWaitPercentual();
		configureCpuSoftPercentual();
		configureCpuSysPercentual();
		configureCpuUsrPercentual();
		configureResidentSetSize();
		configureVirtualSize();
		configureMinorFaultsPerSecond();
		configureMajorFaultsPerSecond();
		configureInterruptionsPerSecond();
		configureDiskUsage();
		configureConcSessions();
		configureLocks();

		configureElapsedTime();
	}
	

	private void configureBuffers( ) {
		
		fuzzyEstimator.buffers.add("low", 0, 1678869.16666667, 2679396.33333333);
		fuzzyEstimator.buffers.add("middle-low", 1678869.16666667, 2679396.33333333, 3679923.5);
		fuzzyEstimator.buffers.add("middle", 2679396.33333333, 3679923.5, 4680450.66666667);
		fuzzyEstimator.buffers.add("middle-high", 3679923.5, 4680450.66666667, 5680977.83333333);
		fuzzyEstimator.buffers.add("high", 4680450.66666667, 5680977.83333333, 66815050);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.buffers);		
		
	}

	private void configureLocks() {
		fuzzyEstimator.locks.add("low", 0, 26.6666666667, 47.3333333333);
		fuzzyEstimator.locks.add("middle-low", 26.6666666667, 47.3333333333, 68);
		fuzzyEstimator.locks.add("middle", 47.3333333333, 68, 88.6666666667);
		fuzzyEstimator.locks.add("middle-high", 68, 88.6666666667, 109.3333333333);
		fuzzyEstimator.locks.add("high", 88.6666666667, 109.3333333333, 1300);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.locks);		
		
	}

	private void configureConcSessions() {
		fuzzyEstimator.concSessions.add("low", 0, 4.3333333333, 6.6666666667);
		fuzzyEstimator.concSessions.add("middle-low", 4.3333333333, 6.6666666667, 9);
		fuzzyEstimator.concSessions.add("middle", 6.6666666667, 9, 11.3333333333);
		fuzzyEstimator.concSessions.add("middle-high", 9, 11.3333333333, 13.6666666667);
		fuzzyEstimator.concSessions.add("high", 11.3333333333, 13.6666666667, 160);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.concSessions);		
	}
	
	private void configureElapsedTime() {
		fuzzyEstimator.elapsedTime.add("low", 0, 60000, 120000);
		fuzzyEstimator.elapsedTime.add("middle-low", 60000, 120000, 180000);
		fuzzyEstimator.elapsedTime.add("middle", 120000, 180000, 240000);
		fuzzyEstimator.elapsedTime.add("middle-high", 180000, 240000, 300000);
		fuzzyEstimator.elapsedTime.add("high", 240000, 300000, 5574260);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.elapsedTime);//Alterado
	}

	private void configureMemoryPercentual() {
		fuzzyEstimator.memoryPercentual.add("low", 0, 49.035, 53.83);
		fuzzyEstimator.memoryPercentual.add("middle-low", 49.035, 53.83, 58.625);
		fuzzyEstimator.memoryPercentual.add("middle", 53.83, 58.625, 63.42);
		fuzzyEstimator.memoryPercentual.add("middle-high", 58.625, 63.42, 68.215);
		fuzzyEstimator.memoryPercentual.add("high", 63.42, 68.215, 101);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.memoryPercentual);//Alterado
	}

	private void configureCpuIOWaitPercentual() {
		fuzzyEstimator.cpuIOWaitPercentual.add("low", 0, 37.8566666667, 49.5933333333);
		fuzzyEstimator.cpuIOWaitPercentual.add("middle-low", 37.8566666667, 49.5933333333, 61.33);
		fuzzyEstimator.cpuIOWaitPercentual.add("middle", 49.5933333333, 61.33, 73.0666666667);
		fuzzyEstimator.cpuIOWaitPercentual.add("middle-high", 61.33, 73.0666666667, 84.8033333333);
		fuzzyEstimator.cpuIOWaitPercentual.add("high", 73.0666666667, 84.8033333333, 101);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.cpuIOWaitPercentual);
	}

	private void configureCpuSoftPercentual() {
		fuzzyEstimator.cpuSoftPercentual.add("low", -0.1, 0.11, 0.22);
		fuzzyEstimator.cpuSoftPercentual.add("middle-low", 0.11, 0.22, 0.33);
		fuzzyEstimator.cpuSoftPercentual.add("middle", 0.22, 0.33, 0.44);
		fuzzyEstimator.cpuSoftPercentual.add("middle-high", 0.33, 0.44, 0.55);
		fuzzyEstimator.cpuSoftPercentual.add("high", 0.44, 0.55, 101);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.cpuSoftPercentual);
	}

	private void configureCpuSysPercentual() {
		fuzzyEstimator.cpuSysPercentual.add("low", -0.1, 2.57, 4.25);
		fuzzyEstimator.cpuSysPercentual.add("middle-low", 2.57, 4.25, 5.93);
		fuzzyEstimator.cpuSysPercentual.add("middle", 4.25, 5.93, 7.61);
		fuzzyEstimator.	cpuSysPercentual.add("middle-high", 5.93, 7.61, 9.29);
		fuzzyEstimator.cpuSysPercentual.add("high", 7.61, 9.29, 101);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.cpuSysPercentual);//Alterado
	}

	private void configureCpuUsrPercentual() {
		fuzzyEstimator.cpuUsrPercentual.add("low", -0.1, 10.8483333333, 20.0166666667);
		fuzzyEstimator.cpuUsrPercentual.add("middle-low", 10.8483333333, 20.0166666667, 29.185);
		fuzzyEstimator.cpuUsrPercentual.add("middle", 20.0166666667, 29.185, 38.3533333333);
		fuzzyEstimator.cpuUsrPercentual.add("middle-high", 29.185, 38.3533333333, 47.5216666667);
		fuzzyEstimator.cpuUsrPercentual.add("high", 38.3533333333, 47.5216666667, 101);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.cpuUsrPercentual);//Alterado
	}

	private void configureResidentSetSize() {
		fuzzyEstimator.residentSetSize.add("low", 0, 1009212.66666667, 1108393.33333333);
		fuzzyEstimator.residentSetSize.add("middle-low", 1009212.66666667, 1108393.33333333, 1207574);
		fuzzyEstimator.residentSetSize.add("middle", 1108393.33333333, 1207574, 1306754.66666667);
		fuzzyEstimator.residentSetSize.add("middle-high", 1207574, 1306754.66666667, 1405935.33333333);
		fuzzyEstimator.residentSetSize.add("high", 1306754.66666667, 1405935.33333333, 	15051160);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.residentSetSize); //Alterado
	}

	private void configureVirtualSize() {
		fuzzyEstimator.virtualSize.add("low", 0, 6440724.66666667, 6768313.33333333);
		fuzzyEstimator.virtualSize.add("middle-low", 6440724.66666667, 6768313.33333333, 7095902);
		fuzzyEstimator.virtualSize.add("middle", 6768313.33333333, 7095902, 7423490.66666667);
		fuzzyEstimator.virtualSize.add("middle-high", 7095902, 7423490.66666667, 7751079.33333333);
		fuzzyEstimator.virtualSize.add("high", 7423490.66666667, 7751079.33333333, 80786680);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.virtualSize);//Alterado
	}

	private void configureMinorFaultsPerSecond() {
		fuzzyEstimator.minorFaultsPerSecond.add("low", 0, 67463.4583333333, 134836.316666667);
		fuzzyEstimator.minorFaultsPerSecond.add("middle-low", 67463.4583333333, 134836.316666667, 202209.175);
		fuzzyEstimator.minorFaultsPerSecond.add("middle", 134836.316666667, 202209.175, 269582.033333333);
		fuzzyEstimator.minorFaultsPerSecond.add("middle-high", 202209.175, 269582.033333333, 336954.891666667);
		fuzzyEstimator.minorFaultsPerSecond.add("high", 269582.033333333, 336954.891666667, 4043270.75);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.minorFaultsPerSecond);//Alterado
	}

	private void configureMajorFaultsPerSecond() {
		fuzzyEstimator.majorFaultsPerSecond.add("low", -1, 381.07, 762.14);
		fuzzyEstimator.majorFaultsPerSecond.add("middle-low", 381.07, 762.14, 1143.21);
		fuzzyEstimator.majorFaultsPerSecond.add("middle", 762.14, 1143.21, 1524.28);
		fuzzyEstimator.majorFaultsPerSecond.add("middle-high", 1143.21, 1524.28, 1905.35);
		fuzzyEstimator.majorFaultsPerSecond.add("high", 1524.28, 1905.35, 22860.42);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.majorFaultsPerSecond);//Alterado
	}

	private void configureInterruptionsPerSecond() {
		fuzzyEstimator.interruptionsPerSecond.add("low", 0, 851.3666666667, 1059.3333333333);
		fuzzyEstimator.interruptionsPerSecond.add("middle-low", 851.3666666667, 1059.3333333333, 1267.3);
		fuzzyEstimator.interruptionsPerSecond.add("middle", 1059.3333333333, 1267.3, 1475.2666666667);
		fuzzyEstimator.interruptionsPerSecond.add("middle-high", 1267.3, 1475.2666666667, 1683.2333333333);
		fuzzyEstimator.interruptionsPerSecond.add("high", 1475.2666666667, 1683.2333333333, 18910.2);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.interruptionsPerSecond);//Alterado
	}

	private void configureDiskUsage() {
		fuzzyEstimator.diskUsage.add("low", 0, 75277.6, 139428.8);
		fuzzyEstimator.diskUsage.add("middle-low", 75277.6, 139428.8, 203580);
		fuzzyEstimator.diskUsage.add("middle", 139428.8, 203580, 267731.2);
		fuzzyEstimator.diskUsage.add("middle-high", 203580, 267731.2, 331882.4);
		fuzzyEstimator.diskUsage.add("high", 267731.2, 331882.4, 3960330.6);
		fuzzyEstimator.getFuzzyEngine().register(fuzzyEstimator.diskUsage);
	}


}
